<!DOCTYPE HTML>
<html lang="zh-CN">



<head>
    <meta charset="utf-8">
    <meta name="keywords" content="操作系统学习笔记 01 - 操作系统的目标、作用及发展过程, MuMa">
    <meta name="description" content="">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta name="renderer" content="webkit|ie-stand|ie-comp">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <!-- Global site tag (gtag.js) - Google Analytics -->


    <title>操作系统学习笔记 01 - 操作系统的目标、作用及发展过程 | MuMa</title>
    <link rel="icon" type="image/png" href="/favicon.png">

    <link rel="stylesheet" type="text/css" href="/libs/awesome/css/all.css">
    <link rel="stylesheet" type="text/css" href="/libs/materialize/materialize.min.css">
    <link rel="stylesheet" type="text/css" href="/libs/aos/aos.css">
    <link rel="stylesheet" type="text/css" href="/libs/animate/animate.min.css">
    <link rel="stylesheet" type="text/css" href="/libs/lightGallery/css/lightgallery.min.css">
    <link rel="stylesheet" type="text/css" href="/css/matery.css">
    <link rel="stylesheet" type="text/css" href="/css/my.css">

    <script src="/libs/jquery/jquery.min.js"></script>

<meta name="generator" content="Hexo 4.2.0"><link rel="alternate" href="/atom.xml" title="MuMa" type="application/atom+xml">
</head>


<body>
    <header class="navbar-fixed">
    <nav id="headNav" class="bg-color nav-transparent">
        <div id="navContainer" class="nav-wrapper container">
            <div class="brand-logo">
                <a href="/" class="waves-effect waves-light">
                    
                    <img src="/medias/logo.png" class="logo-img" alt="LOGO">
                    
                    <span class="logo-span">MuMa</span>
                </a>
            </div>
            

<a href="#" data-target="mobile-nav" class="sidenav-trigger button-collapse"><i class="fas fa-bars"></i></a>
<ul class="right nav-menu">
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/" class="waves-effect waves-light">
      
      <i class="fas fa-home" style="zoom: 0.6;"></i>
      
      <span>首页</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/categories" class="waves-effect waves-light">
      
      <i class="fas fa-bookmark" style="zoom: 0.6;"></i>
      
      <span>分类</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/archives" class="waves-effect waves-light">
      
      <i class="fas fa-archive" style="zoom: 0.6;"></i>
      
      <span>归档</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/about" class="waves-effect waves-light">
      
      <i class="fas fa-user-circle" style="zoom: 0.6;"></i>
      
      <span>关于</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/contact" class="waves-effect waves-light">
      
      <i class="fas fa-comments" style="zoom: 0.6;"></i>
      
      <span>留言板</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/friends" class="waves-effect waves-light">
      
      <i class="fas fa-address-book" style="zoom: 0.6;"></i>
      
      <span>友情链接</span>
    </a>
    
  </li>
  
  <li>
    <a href="#searchModal" class="modal-trigger waves-effect waves-light">
      <i id="searchIcon" class="fas fa-search" title="搜索" style="zoom: 0.85;"></i>
    </a>
  </li>
</ul>


<div id="mobile-nav" class="side-nav sidenav">

    <div class="mobile-head bg-color">
        
        <img src="/medias/logo.png" class="logo-img circle responsive-img">
        
        <div class="logo-name">MuMa</div>
        <div class="logo-desc">
            
            Never really desperate, only the lost of the soul.
            
        </div>
    </div>

    

    <ul class="menu-list mobile-menu-list">
        
        <li class="m-nav-item">
	  
		<a href="/" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-home"></i>
			
			首页
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/categories" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-bookmark"></i>
			
			分类
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/archives" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-archive"></i>
			
			归档
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/about" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-user-circle"></i>
			
			关于
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/contact" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-comments"></i>
			
			留言板
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/friends" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-address-book"></i>
			
			友情链接
		</a>
          
        </li>
        
        
        <li><div class="divider"></div></li>
        <li>
            <a href="https://gitee.com/village-_head" class="waves-effect waves-light" target="_blank">
                <i class="fab fa-github-square fa-fw"></i>Fork Me
            </a>
        </li>
        
    </ul>
</div>


        </div>

        
            <style>
    .nav-transparent .github-corner {
        display: none !important;
    }

    .github-corner {
        position: absolute;
        z-index: 10;
        top: 0;
        right: 0;
        border: 0;
        transform: scale(1.1);
    }

    .github-corner svg {
        color: #F062A7;
        fill: #fff;
        height: 64px;
        width: 64px;
    }

    .github-corner:hover .octo-arm {
        animation: a 0.56s ease-in-out;
    }

    .github-corner .octo-arm {
        animation: none;
    }

    @keyframes a {
        0%,
        to {
            transform: rotate(0);
        }
        20%,
        60% {
            transform: rotate(-25deg);
        }
        40%,
        80% {
            transform: rotate(10deg);
        }
    }
</style>

<a href="https://gitee.com/village-_head" class="github-corner tooltipped hide-on-med-and-down" target="_blank"
   data-tooltip="Fork Me" data-position="left" data-delay="50">
    <svg viewBox="0 0 250 250" aria-hidden="true">
        <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
        <path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
              fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>
        <path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
              fill="currentColor" class="octo-body"></path>
    </svg>
</a>
        
    </nav>

</header>

    



<div class="bg-cover pd-header post-cover" style="background-image: url('/medias/featureimages/12.jpg')">
    <div class="container" style="right: 0px;left: 0px;">
        <div class="row">
            <div class="col s12 m12 l12">
                <div class="brand">
                    <h1 class="description center-align post-title">操作系统学习笔记 01 - 操作系统的目标、作用及发展过程</h1>
                </div>
            </div>
        </div>
    </div>
</div>




<main class="post-container content">

    
    <link rel="stylesheet" href="/libs/tocbot/tocbot.css">
<style>
    #articleContent h1::before,
    #articleContent h2::before,
    #articleContent h3::before,
    #articleContent h4::before,
    #articleContent h5::before,
    #articleContent h6::before {
        display: block;
        content: " ";
        height: 100px;
        margin-top: -100px;
        visibility: hidden;
    }

    #articleContent :focus {
        outline: none;
    }

    .toc-fixed {
        position: fixed;
        top: 64px;
    }

    .toc-widget {
        width: 345px;
        padding-left: 20px;
    }

    .toc-widget .toc-title {
        margin: 35px 0 15px 0;
        padding-left: 17px;
        font-size: 1.5rem;
        font-weight: bold;
        line-height: 1.5rem;
    }

    .toc-widget ol {
        padding: 0;
        list-style: none;
    }

    #toc-content {
        height: calc(100vh - 250px);
        overflow: auto;
    }

    #toc-content ol {
        padding-left: 10px;
    }

    #toc-content ol li {
        padding-left: 10px;
    }

    #toc-content .toc-link:hover {
        color: #42b983;
        font-weight: 700;
        text-decoration: underline;
    }

    #toc-content .toc-link::before {
        background-color: transparent;
        max-height: 25px;

        position: absolute;
        right: 23.5vw;
        display: block;
    }

    #toc-content .is-active-link {
        color: #42b983;
    }

    #floating-toc-btn {
        position: fixed;
        right: 15px;
        bottom: 76px;
        padding-top: 15px;
        margin-bottom: 0;
        z-index: 998;
    }

    #floating-toc-btn .btn-floating {
        width: 48px;
        height: 48px;
    }

    #floating-toc-btn .btn-floating i {
        line-height: 48px;
        font-size: 1.4rem;
    }
</style>
<div class="row">
    <div id="main-content" class="col s12 m12 l9">
        <!-- 文章内容详情 -->
<div id="artDetail">
    <div class="card">
        <div class="card-content article-info">
            <div class="row tag-cate">
                <div class="col s7">
                    
                    <div class="article-tag">
                        
                            <a href="/tags/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">
                                <span class="chip bg-color">操作系统</span>
                            </a>
                        
                    </div>
                    
                </div>
                <div class="col s5 right-align">
                    
                    <div class="post-cate">
                        <i class="fas fa-bookmark fa-fw icon-category"></i>
                        
                            <a href="/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" class="post-category">
                                操作系统学习笔记
                            </a>
                        
                    </div>
                    
                </div>
            </div>

            <div class="post-info">
                
                <div class="post-date info-break-policy">
                    <i class="far fa-calendar-minus fa-fw"></i>发布日期:&nbsp;&nbsp;
                    2020-05-16
                </div>
                

                

                
                <div class="info-break-policy">
                    <i class="far fa-file-word fa-fw"></i>文章字数:&nbsp;&nbsp;
                    9.8k
                </div>
                

                
                <div class="info-break-policy">
                    <i class="far fa-clock fa-fw"></i>阅读时长:&nbsp;&nbsp;
                    34 分
                </div>
                

                
                    <div id="busuanzi_container_page_pv" class="info-break-policy">
                        <i class="far fa-eye fa-fw"></i>阅读次数:&nbsp;&nbsp;
                        <span id="busuanzi_value_page_pv"></span>
                    </div>
				
            </div>
        </div>
        <hr class="clearfix">
        <div class="card-content article-card-content">
            <div id="articleContent">
                <h1 id="一、操作系统的目标和作用"><a href="#一、操作系统的目标和作用" class="headerlink" title="一、操作系统的目标和作用"></a>一、操作系统的目标和作用</h1><p>在计算机系统上配置<strong>操作系统</strong>的<strong>主要目标</strong>，首先<strong>与计算机系统的规模有关</strong>。其次，影响操作系统的主要目标的另一个重要因素是<strong>操作系统</strong>的<strong>应用环境</strong>。</p>
<h2 id="1、操作系统的目标"><a href="#1、操作系统的目标" class="headerlink" title="1、操作系统的目标"></a>1、操作系统的目标</h2><p>目前存在着多种类型的 <code>OS</code>，不同类型的 <code>OS</code>，其目标<strong>各有</strong>所<strong>侧重</strong>。一般地说，在计算机硬件上配置的 <code>OS</code>，其目标有以下几点。</p>
<h3 id="1-有效性"><a href="#1-有效性" class="headerlink" title="1.    有效性"></a>1.    有效性</h3><p>操作系统的有效性可包含如下两方面的含意：</p>
<ul>
<li><strong>提高系统资源利用率</strong>。配置了 <code>OS</code> 之后，可使 <code>CPU</code> 和 <code>I/O</code> 设备由于能<strong>保持忙碌状态</strong>而得到<strong>有效</strong>的<strong>利用</strong>，且可使<strong>内存</strong>和<strong>外存</strong>中存放的<strong>数据</strong>因<strong>有序</strong>而<strong>节省</strong>了<strong>存储空间</strong>。</li>
<li><strong>提高系统的吞吐量</strong>。操作系统还可以通过合理地组织计算机的工作流程，而进一步改善资源的利用率，<strong>加速程序的运行，缩短程序的运行周期</strong>，从而提高系统的吞吐量。<h3 id="2-方便性"><a href="#2-方便性" class="headerlink" title="2.    方便性"></a>2.    方便性</h3>配置 <code>OS</code> 后可使计算机系统更<strong>容易使用</strong>。</li>
</ul>
<p><strong>方便性</strong>和<strong>有效性</strong>是设计操作系统时<strong>最重要</strong>的两个目标。</p>
<h3 id="3-可扩充性"><a href="#3-可扩充性" class="headerlink" title="3.    可扩充性"></a>3.    可扩充性</h3><p>随着 <code>VLSI</code> 技术和<strong>计算机技术</strong>的迅速发展，<strong>计算机硬件</strong>和<strong>体系结构</strong>也随之得到迅速发展，相应地，它们也对 <code>OS</code> 提出了更高的功能和性能要求。<code>OS</code> 必须具有很好的可扩充性，方能<strong>适应计算机硬件</strong>、<strong>体系结构</strong>以及<strong>应用发展</strong>的<strong>要求</strong>。</p>
<h3 id="4-开放性"><a href="#4-开放性" class="headerlink" title="4.    开放性"></a>4.    开放性</h3><p><code>Internet</code> 的应用的日益普及，使计算机操作系统的<strong>应用环境</strong>已由<strong>单机封闭</strong>环境转向<strong>开放的网络</strong>环境。为使来自<strong>不同厂家</strong>的计算机和设备能<strong>通过网络</strong>加以<strong>集成化</strong>，并能正确、有效地协同工作，<strong>实现应用的可移植性和互操作性</strong>，要求操作系统必须提供统一的开放环境，进而要求 <code>OS</code> 具有开放性。<br>开放性是指系统能遵循世界标准规范，特别是遵循<strong>开放系统互连</strong>(<code>OSI</code>)国际标准。凡遵循国际标准所开发的硬件和软件，均能<strong>彼此兼容，可方便地实现互连</strong>。</p>
<h2 id="2、操作系统的作用"><a href="#2、操作系统的作用" class="headerlink" title="2、操作系统的作用"></a>2、操作系统的作用</h2><p>从<strong>一般用户</strong>的观点，可把 <code>OS</code> 看做是用户与计算机硬件系统之间的<strong>接口</strong>；从资源管理的观点看，则可把 <code>OS</code> 视为计算机系统资源的<strong>管理者</strong>。另外，<code>OS</code> 实现了对计算机资源的抽象，<strong>隐藏了对硬件操作的细节，使用户能更方便地使用机器</strong>。</p>
<h3 id="1-OS-作为用户与计算机硬件系统之间的接口"><a href="#1-OS-作为用户与计算机硬件系统之间的接口" class="headerlink" title="1.    OS 作为用户与计算机硬件系统之间的接口"></a>1.    OS 作为用户与计算机硬件系统之间的接口</h3><p><code>OS</code> 作为用户与计算机硬件系统之间接口的<strong>含义</strong>是：<code>OS</code> 处于用户与计算机硬件系统之间，用户通过 <code>OS</code> 来使用计算机系统。或者说，用户在 <code>OS</code> 帮助下，能够<strong>方便</strong>、<strong>快捷</strong>、<strong>安全</strong>、<strong>可靠</strong>地<strong>操纵计算机硬件</strong>和<strong>运行自己的程序</strong>。应注意，<strong>OS</strong> 是一个<strong>系统软件，因而这种接口是软件接口</strong>。<br>用户可通过以下三种方式使用计算机。</p>
<ul>
<li><strong>命令方式</strong>。这是指由 <code>OS</code> 提供了一组联机命令接口，以允许用户通过键盘输入<strong>有关命令</strong>来取得操作系统的服务，并控制用户程序的运行。</li>
<li><strong>系统调用方式</strong>。<code>OS</code> 提供了一组系统调用， 用户可在自己的应用程序中通过相应的系统调用，来实现与操作系统的通信，并取得它的服务。</li>
<li><strong>图形、窗口方式</strong>。这是当前使用<strong>最为方便</strong>、<strong>最为广泛</strong>的接口，它允许用户通过屏幕上的窗口和图标来实现与操作系统的通信，并取得它的服务。<h3 id="2-OS-作为计算机系统资源的管理者"><a href="#2-OS-作为计算机系统资源的管理者" class="headerlink" title="2.    OS 作为计算机系统资源的管理者"></a>2.    OS 作为计算机系统资源的管理者</h3>在一个计算机系统中，通常都含有各种各样的硬件和软件资源。归纳起来可将资源分为四类：<strong>处理器</strong>、<strong>存储器</strong>、<strong>I/O 设备</strong>以及<strong>信息</strong>(<strong>数据</strong>和<strong>程序</strong>)。相应地，<code>OS</code> 的<strong>主要功能</strong>也正是针对这四类资源进行<strong>有效</strong>的<strong>管理</strong>，即：<strong>处理机管理</strong>，用于分配和控制处理机；<strong>存储器管理</strong>， 主要负责内存的分配与回收；<strong>I/O 设备管理</strong>负责 I/O 设备的分配与操纵；<strong>文件管理</strong>，负责文件的存取、共享和保护。事实上，当今世界上广为流行的一个关于 <code>OS</code> 作用的观点，正是<strong>把 OS 作为计算机系统的资源管理者</strong>。</li>
</ul>
<h3 id="3-OS-实现了对计算机资源的抽象"><a href="#3-OS-实现了对计算机资源的抽象" class="headerlink" title="3.    OS 实现了对计算机资源的抽象"></a>3.    OS 实现了对计算机资源的抽象</h3><p><code>OS</code> 是铺设在计算机<strong>硬件</strong>上的<strong>多层系统软件</strong>，它们不仅<strong>增强</strong>了<strong>系统</strong>的<strong>功能</strong>， 而且还<strong>隐藏</strong>了对硬件<strong>操作</strong>的<strong>细节</strong>，由它们实现了对计算机硬件操作的<strong>多个层次</strong>的<strong>抽象</strong>。值得说明的是，<strong>对一个硬件在底层进行抽象后，在高层还可再次对该资源进行抽象，成为更高层的抽象模型</strong>。随着抽象层次的提高，抽象接口所提供的功能就越来越强，用户使用起来也更加方便。</p>
<h2 id="3、推动操作系统发展的主要动力"><a href="#3、推动操作系统发展的主要动力" class="headerlink" title="3、推动操作系统发展的主要动力"></a>3、推动操作系统发展的主要动力</h2><p>推动操作系统发展的<strong>主要动力</strong>，可归结为如下所述的四个方面。</p>
<h3 id="1-不断提高计算机资源的利用率"><a href="#1-不断提高计算机资源的利用率" class="headerlink" title="1.    不断提高计算机资源的利用率"></a>1.    不断提高计算机资源的利用率</h3><p>在计算机发展的初期，计算机系统特别昂贵，人们必须千方百计地提高计算机系统中各种资源的利用率，这就是 <code>OS</code> 最初发展的推动力。由此形成了能自动地对一批作业进行处理的<strong>多道批处理系统</strong>。在 20 世纪 60 和 70 年代，又分别出现了能有效提高 <code>I/O</code> 设备和 <code>CPU</code> 利用率的 <code>SPOOLing</code> 系统和改善存储器系统利用率的<strong>虚拟存储器技术</strong>，以及在网络环境下， 在服务器上配置了允许所有网络用户访问的<strong>文件系统</strong>和<strong>数据库系统</strong>。</p>
<h3 id="2-方便用户"><a href="#2-方便用户" class="headerlink" title="2.    方便用户"></a>2.    方便用户</h3><p>当资源利用率不高的问题得到基本解决后，用户在<strong>上机</strong>、<strong>调试程序</strong>时的<strong>不方便性</strong>便又成为<strong>主要矛盾</strong>。于是人们又想方设法<strong>改善</strong>用户上机、调试程序时的环境，这又成为继续推动 <code>OS</code> 发展的主要因素。随之便形成了允许进行人机交互的<strong>分时系统</strong>，或称为<strong>多用户系统</strong>。在 20 世纪 90 年代初出现了受到用户广泛欢迎的<strong>图形用户界面</strong>，极大地方便了用户使用计算机，使中小学生都能很快地学会上机操作，这无疑会更加<strong>推动计算机的迅速普及</strong>。</p>
<h3 id="3-器件的不断更新换代"><a href="#3-器件的不断更新换代" class="headerlink" title="3.    器件的不断更新换代"></a>3.    器件的不断更新换代</h3><p><strong>微电子技术</strong>的<strong>迅猛发展</strong>，推动着计算机器件，特别是<strong>微机芯片</strong>的不断<strong>更新</strong>，使得计算机的性能迅速提高，<strong>规模</strong>急剧<strong>扩大</strong>，从而推动了 <code>OS</code> 的功能和性能也迅速增强和提高。<br>在多处理机快速发展的同时，<strong>外部设备</strong>也在迅速发展。</p>
<h3 id="4-计算机体系结构的不断发展"><a href="#4-计算机体系结构的不断发展" class="headerlink" title="4.    计算机体系结构的不断发展"></a>4.    计算机体系结构的不断发展</h3><p><strong>计算机体系结构</strong>的发展，也不断推动着 <code>OS</code> 的发展并产生<strong>新的</strong>操作系统<strong>类型</strong>。</p>
<h1 id="二、操作系统的发展过程"><a href="#二、操作系统的发展过程" class="headerlink" title="二、操作系统的发展过程"></a>二、操作系统的发展过程</h1><p>OS 的形成迄今已有 50 多年的时间。在上世纪 50 年代中期出现了单道批处理操作系统； 60 年代中期产生了多道程序批处理系统；不久又出现了基于多道程序的分时系统，与此同时也诞生了用于工业控制和武器控制的实时操作系统。20 世纪 80 年代开始至 21 世纪初， 是微型机、多处理机和计算机网络高速发展的年代，同时也是微机 OS、多处理机 OS 和网络 OS 以及分布式 OS 的形成和大发展的年代。</p>
<h2 id="1、无操作系统的计算机系统"><a href="#1、无操作系统的计算机系统" class="headerlink" title="1、无操作系统的计算机系统"></a>1、无操作系统的计算机系统</h2><h3 id="1-人工操作方式"><a href="#1-人工操作方式" class="headerlink" title="1.    人工操作方式"></a>1.    人工操作方式</h3><p>从第一台计算机诞生(1945 年)到 20 世纪 50 年代中期的计算机，属于<strong>第一代计算机</strong>。这时还未出现 <code>OS</code>。计算机操作是由用户(即程序员)采用<strong>人工操作</strong>方式直接<strong>使用</strong>计算机<strong>硬件</strong>系统，即由程序员将事先已穿孔(对应于程序和数据)的纸带(或卡片)装入纸带输入机(或卡片输入机)，再启动它们将程序和数据输入计算机，然后启动计算机运行。当程序运行完毕并取走计算结果之后，才让下一个用户上机。这种人工操作方式有以下两方面的缺点:</p>
<ul>
<li><strong>用户独占全机</strong>。此时，计算机及其全部资源只能由上机用户独占。</li>
<li><strong>CPU 等待人工操作</strong>。当用户进行装带(卡)、卸带(卡)等人工操作时，<code>CPU</code> 及<strong>内存</strong>等资源是空闲的。<h3 id="2-脱机输入-输出方式"><a href="#2-脱机输入-输出方式" class="headerlink" title="2.    脱机输入/输出方式"></a>2.    脱机输入/输出方式</h3>为了解决人机矛盾及 <code>CPU</code> 和 <code>I/O</code> 设备之间速度不匹配的矛盾，20 世纪 50 年代末出现了<strong>脱机输入/输出</strong>(<code>Off-Line I/O)</code>技术。该技术是事先将装有用户程序和数据的纸带(或卡片) 装入纸带输入机(或卡片机)，在一台外围机的控制下，把纸带(卡片)上的<strong>数据</strong>(程序)输入到磁带上。当 <code>CPU</code> 需要这些程序和数据时，再从磁带上将其<strong>高速</strong>地调入内存。<br>由于程序和数据的输入和输出都是在<strong>外围机</strong>的控制下完成的，或者说， 它们是在<strong>脱离主机</strong>的情况下进行的，故称为脱机输入/输出方式；反之，在<strong>主机</strong>的直接控制下进行输入/输出的方式称为<strong>联机输入/输出</strong>(<code>On-Line I/O</code>)方式。这种脱机 <code>I/O</code> 方式的主要优点如下：</li>
<li><strong>减少了CPU 的空闲时间</strong>。装带(卡)、卸带(卡)以及将数据从低速 <code>I/O</code> 设备送到高速磁带(或盘)上，都是在脱机情况下进行的，并<strong>不占用主机时间，从而有效地减少了CPU 的空闲时间，缓和了人机矛盾</strong>。</li>
<li><strong>提高了 I/O 速度</strong>。当 <code>CPU</code> 在运行中需要数据时，是直接从高速的磁带或磁盘上将数据调入内存的，不再是从低速 <code>I/O</code> 设备上输入，极大地提高了 <code>I/O</code> 速度，从而缓和了 <code>CPU</code> 和 <code>I/O</code> 设备速度不匹配的矛盾，进一步减少了 <code>CPU</code> 的空闲时间。<h2 id="2、单道批处理系统"><a href="#2、单道批处理系统" class="headerlink" title="2、单道批处理系统"></a>2、单道批处理系统</h2><h3 id="1-单道批处理系统的处理过程"><a href="#1-单道批处理系统的处理过程" class="headerlink" title="1.    单道批处理系统的处理过程"></a>1.    单道批处理系统的处理过程</h3>上世纪 50 年代中期发明了晶体管，人们开始用晶体管替代真空管来制作计算机，从而出现了<strong>第二代计算机</strong>。它不仅使<strong>计算机的体积大大减小，功耗显著降低，同时可靠性也得到大幅度提高，使计算机已具有推广应用的价值，但计算机系统仍非常昂贵</strong>。为了能充分地利用它，应尽量让该系统<strong>连续运行</strong>，以<strong>减少空闲时间</strong>。为此，通常是把一批作业以脱机方式输入到磁带上，并在系统中配上<strong>监督程序</strong>(<code>Monitor</code>)，在它的控制下使这批作业能一个接一个地连续处理。其自动处理过程是：<strong>首先，由监督程序将磁带上的第一个作业装入内存，并把运行控制权交给该作业。当该作业处理完成时，又把控制权交还给监督程序，再由监督程序把磁带(盘)上的第二个作业调入内存。计算机系统就这样自动地一个作业一个作业地进行处理，直至磁带(盘)上的所有作业全部完成，这样便形成了早期的批处理系统。由于系统对作业的处理都是成批地进行的，且在内存中始终只保持一道作业</strong>，故称此系统为<strong>单道批处理系统</strong>(<code>Simple Batch Processing System</code>)。<h3 id="2-单道批处理系统的特征"><a href="#2-单道批处理系统的特征" class="headerlink" title="2.    单道批处理系统的特征"></a>2.    单道批处理系统的特征</h3>单道批处理系统是最早出现的一种 <code>OS</code>。严格地说，它只能算作是 <code>OS</code> 的<strong>前身</strong>而并非是现在人们所理解的 <code>OS</code>。该系统的主要特征如下：</li>
<li><strong>自动性</strong>。在顺利情况下，在磁带上的一批作业能自动地逐个地依次运行，而<strong>无需人工干预</strong>。</li>
<li><strong>顺序性</strong>。磁带上的各道作业是顺序地进入内存，各道作业的完成顺序与它们进入内存的顺序，在正常情况下应完全相同，亦即<strong>先调入内存的作业先完成</strong>。</li>
<li><strong>单道性</strong>。内存中仅有一道程序运行，<strong>即监督程序每次从磁带上只调入一道程序进入内存运行</strong>，当该程序完成或发生异常情况时，才换入其后继程序进入内存运行。</li>
</ul>
<h2 id="3、多道批处理系统"><a href="#3、多道批处理系统" class="headerlink" title="3、多道批处理系统"></a>3、多道批处理系统</h2><p>20 世纪 60 年代中期，人们开始利用小规模集成电路来制作计算机，生产出<strong>第三代计算机</strong>。由 IBM 公司生产的第一台小规模集成电路计算机——360 机，较之于晶体管计算机， <strong>无论在体积、功耗、速度和可靠性上，都有了显著的改善</strong>。虽然在开发 360 机器使用的操作系统时，为能在机器上运行多道程序而遇到了极大的困难，但最终还是成功地开发出能在一台机器中<strong>运行多道程序</strong>的操作系统<code>OS/360</code>。</p>
<h3 id="1-多道程序设计的基本概念"><a href="#1-多道程序设计的基本概念" class="headerlink" title="1.    多道程序设计的基本概念"></a>1.    多道程序设计的基本概念</h3><p>为了进一步提高资源的利用率和系统吞吐量，在 20 世纪 60 年代中期又引入了多道程序设计技术，由此而形成了<strong>多道批处理系统</strong>(<code>Multiprogrammed Batch Processing System</code>)。在该系统中，用户所提交的作业都先存放在<strong>外存</strong>上并排成一个<strong>队列</strong>，称为“<strong>后备队列</strong>”；然后，由<strong>作业调度程序</strong>按一定的<strong>算法</strong>从<strong>后备队列</strong>中选择若干个作业调入内存，使它们<strong>共享</strong> <code>CPU</code> 和系统中的各种资源。具体地说，在 <code>OS</code> 中引入多道程序设计技术可带来以下好处：</p>
<ul>
<li><strong>提高 CPU 的利用率</strong>。当内存中仅有一道程序时，每逢该程序在运行中发出 <code>I/O</code> 请求后，<code>CPU</code> 空闲，必须在其 <code>I/O</code> 完成后 <code>CPU</code> 才继续运行；尤其因 <code>I/O</code> 设备的低速性，更使<code>CPU</code> 的利用率显著降低。在引入多道程序设计技术后，由于同时在内存中装有<strong>若干道程序</strong>，并使它们<strong>交替地运行</strong>，这样，当正在运行的程序因 <code>I/O</code> 而暂停执行时，系统可调度另一道程序运行，从而保持了 <code>CPU</code> 处于忙碌状态。</li>
<li><strong>可提高内存和 I/O 设备利用率</strong>。为了能运行较大的作业，通常内存都具有较大容量， 但由于 80%以上的作业都属于中小型，因此在单道程序环境下，也必定造成内存的浪费。类似地，对于系统中所配置的多种类型的 <code>I/O</code> 设备，在单道程序环境下也不能充分利用。如果允许在内存中装入多道程序，并允许它们<strong>并发执行</strong>，则无疑会大大提高内存和 <code>I/O</code> 设备的利用率。</li>
<li><strong>增加系统吞吐量</strong>。在保持 <code>CPU</code>、<code>I/O</code> 设备不断忙碌的同时，也必然会大幅度地提高系统的吞吐量，从而降低作业加工所需的费用。<h3 id="2-多道批处理系统的优缺点"><a href="#2-多道批处理系统的优缺点" class="headerlink" title="2.    多道批处理系统的优缺点"></a>2.    多道批处理系统的优缺点</h3>虽然早在 20 世纪 60 年代就已出现了多道批处理系统，但至今它仍是<strong>三大基本操作系统</strong>类型之一。在<strong>大多数</strong>大、中、小型机中都配置了它，说明它具有其它类型 <code>OS</code> 所不具有的优点。多道批处理系统的主要优缺点如下：</li>
<li><strong>资源利用率高</strong>。由于在内存中驻留了多道程序，它们共享资源，可保持资源处于忙碌状态，从而使各种资源得以充分利用。</li>
<li><strong>系统吞吐量大</strong>。系统吞吐量是指<strong>系统在单位时间内所完成的总工作量</strong>。能提高系统吞吐量的主要原因可归结为：<strong>第一，CPU 和其它资源保持“忙碌”状态； 第二，仅当作业完成时或运行不下去时才进行切换，系统开销小</strong>。</li>
<li><strong>平均周转时间长</strong>。作业的周转时间是指<strong>从作业进入系统开始，直至其完成并退出系统为止所经历的时间</strong>。在批处理系统中，由于作业要排队，依次进行处理，因而作业的周转时间较长，通常需几个小时，甚至几天。</li>
<li><strong>无交互能力</strong>。用户一旦把作业提交给系统后，直至作业完成，用户都不能与自己的作业进行交互，这对<strong>修改</strong>和<strong>调试程序</strong>是极不方便的。<h3 id="3-多道批处理系统需要解决的问题"><a href="#3-多道批处理系统需要解决的问题" class="headerlink" title="3.    多道批处理系统需要解决的问题"></a>3.    多道批处理系统需要解决的问题</h3>多道批处理系统是一种<strong>有效</strong>、但<strong>十分复杂</strong>的系统。为使系统中的多道程序间能协调地运行，必须解决下述一系列问题。</li>
<li><strong>处理机管理问题</strong>。在多道程序之间，应如何<strong>分配</strong>被它们共享的处理机，使 CPU 既能满足各程序运行的需要，又能提高处理机的利用率，以及一旦把处理机分配给某程序后， 又应在<strong>何时收回</strong>等一系列问题，属于处理机管理问题。</li>
<li><strong>内存管理问题</strong>。应如何为每道程序分配必要的内存空间，使它们“各得其所”且不致因相互重叠而丢失信息，以及应如何防止因某道程序出现异常情况而破坏其它程序等问题，就是内存管理问题。</li>
<li><strong>I/O 设备管理问题</strong>。系统中可能具有多种类型的 <code>I/O</code> 设备供多道程序所共享，应如何分配这些 <code>I/O</code> 设备，如何做到既方便用户对设备的使用，又能提高设备的利用率，这就是<code>I/O</code> 设备管理问题。</li>
<li><strong>文件管理问题</strong>。在现代计算机系统中，通常都存放着大量的程序和数据(以文件形式存在)，应如何组织这些程序和数据，才能使它们既便于用户使用，又能保证数据的<strong>安全性</strong>和<strong>一致性</strong>，这些属于文件管理问题。</li>
<li><strong>作业管理问题</strong>。对于系统中的各种应用程序，其中有的属于计算型，即以计算为主的程序；有的属于 <code>I/O</code> 型，即以 <code>I/O</code> 为主的程序；又有些作业既重要又紧迫；而有的作业则要求系统能及时响应，这时应如何组织这些作业，这便是作业管理问题。</li>
</ul>
<p>为此，应在计算机系统中增加一组软件，用以对上述问题进行妥善、有效的处理。这组软件应包括：<strong>能控制和管理四大资源的软件，合理地对各类作业进行调度的软件，以及方便用户使用计算机的软件</strong>。正是这样一组软件构成了操作系统。据此，我们可把<strong>操作系统</strong>定义为：<strong>操作系统是一组控制和管理计算机硬件和软件资源，合理地对各类作业进行调度，以及方便用户使用的程序的集合</strong>。</p>
<h2 id="4、分时系统"><a href="#4、分时系统" class="headerlink" title="4、分时系统"></a>4、分时系统</h2><h3 id="1-分时系统的产生"><a href="#1-分时系统的产生" class="headerlink" title="1.    分时系统的产生"></a>1.    分时系统的产生</h3><p>分时系统(<code>Time Sharing System</code>)与多道批处理系统之间有着截然不同的<strong>性能差别</strong>，它能很好地将一台计算机提供给<strong>多个用户同时使用</strong>，提高计算机的利用率。它被经常应用于<strong>查询系统</strong>中，满足许多查询用户的需要。用户的需求具体表现在以下几个方面：</p>
<ul>
<li><strong>人机交互</strong>。由于新编程序难免有些错误或不当之处需要修改，因而希望能像早期使用计算机时一样对它进行直接控制，并能以<strong>边运行边修改</strong>的方式，对程序中的错误进行修改，亦即，希望能进行人机交互。</li>
<li><strong>共享主机</strong>。在 20 世纪 60 年代计算机非常昂贵，不可能像现在这样每人独占一台微机，而只能是由<strong>多个用户共享一台计算机</strong>，但用户在使用机器时应能够像自己独占计算机一样，不仅<strong>可以随时与计算机交互，而且应感觉不到其他用户也在使用该计算机</strong>。</li>
<li><strong>便于用户上机</strong>。在多道批处理系统中，用户上机前必须把自己的作业邮寄或亲自送到机房。这对于用户尤其是远地用户来说是十分不便的。用户希望能通过自己的<strong>终端</strong>直接将作业传送到机器上进行处理，并能对自己的作业进行控制。</li>
</ul>
<p>由上所述不难得知，<strong>分时系统</strong>是指，<strong>在一台主机上连接了多个带有显示器和键盘的终端，同时允许多个用户通过自己的终端，以交互方式使用计算机，共享主机中的资源</strong>。<br>第一台真正的分时操作系统(<code>CTSS</code>，<code>Compatable Time Sharing System</code>)是由麻省理工学院开发成功的。继 <code>CTSS</code> 成功后，麻省理工学院又和贝尔实验室、通用电气公司联合开发出<strong>多用户多任务操作系统</strong>——<code>MULTICS</code>，该机器能支持数百用户。值得一提的是，参加 <code>MULTICS</code>研制的贝尔实验室的 <code>Ken Thempson</code>，在 <code>PDP-7</code> 小型机上开发出一个简化的 <code>MULTICS</code> 版本，它就是当今广为流行的 <code>UNIX</code> 操作系统的前身。</p>
<h3 id="2-分时系统实现中的关键问题"><a href="#2-分时系统实现中的关键问题" class="headerlink" title="2.    分时系统实现中的关键问题"></a>2.    分时系统实现中的关键问题</h3><p>为实现分时系统，必须解决一系列问题。其中最关键的问题是<strong>如何使用户能与自己的作业进行交互</strong>，即<strong>当用户在自己的终端上键入命令时，系统应能及时接收并及时处理该命令，再将结果返回给用户</strong>。此后，用户可继续键入下一条命令，此即<strong>人机交互</strong>。应强调指出，<strong>即使有多个用户同时通过自己的键盘键入命令，系统也应能全部地及时接收并处理这些命令</strong>。</p>
<ul>
<li><strong>及时接收</strong>。要及时接收用户键入的命令或数据并不困难，为此，只需在系统中配置一个<strong>多路卡</strong>。例如，当要在主机上连接 8 个终端时，须配置一个 8 用户的多路卡。多路卡的<strong>作用</strong>是<strong>使主机能同时接收各用户从终端上输入的数据</strong>。此外，还须为<strong>每个终端配置一个缓冲区，用来暂存用户键入的命令(或数据)</strong>。</li>
<li><strong>及时处理</strong>。<strong>人机交互的关键，是使用户键入命令后能及时地控制自己作业的运行， 或修改自己的作业</strong>。为此，各个用户的作业都必须在内存中，且应能频繁地获得处理机而运行；否则，用户键入的命令将无法作用到自己的作业上。</li>
</ul>
<p>由此可见，为<strong>实现人机交互</strong>，必须<strong>彻底地改变原来批处理系统的运行方式</strong>。首先，用户作业<strong>不能先进入磁盘，然后再调入内存</strong>。因为作业在磁盘上不能运行，当然用户也无法与机器交互，因此，作业应直接进入内存。其次，不允许一个作业长期占用处理机，直至它运行结束或出现 I/O 请求后，方才调度其它作业运行。为此，应该规定每个作业只运行一个很短的时间(例如 0.1 秒钟，通常把这段时间称为<strong>时间片</strong>)，然后便暂停该作业的运行，并立即调度下一个程序运行。如果在不长的时间(如 3 秒)内能使所有的用户作业都执行一次 (一个时间片的时间)，便可使每个用户都能及时地与自己的作业交互，从而可使用户的请求得到及时响应。</p>
<h3 id="3-分时系统的特征"><a href="#3-分时系统的特征" class="headerlink" title="3.    分时系统的特征"></a>3.    分时系统的特征</h3><p>分时系统与多道批处理系统相比，具有非常明显的不同特征，由上所述可以归纳成以下四个特点：</p>
<ul>
<li><strong>多路性</strong>。<strong>允许在一台主机上同时联接多台联机终端，系统按分时原则为每个用户服务。</strong>宏观上，是<strong>多个用户同时工作</strong>，<strong>共享系统资源</strong>；而微观上，则是每个用户作业<strong>轮流</strong>运行一个时间片。<strong>多路性即同时性</strong>，它提高了资源利用率，降低了使用费用，从而促进了计算机更广泛的应用。</li>
<li><strong>独立性</strong>。每个用户各占一个终端，彼此独立操作，互不干扰。因此，用户所感觉到的，就像是他一人独占主机。</li>
<li><strong>及时性</strong>。用户的请求能在很短的时间内获得响应。此时间间隔是以人们所能接受的等待时间来确定的，通常仅为 1～3 秒钟。</li>
<li><strong>交互性</strong>。用户可通过终端与系统进行广泛的<strong>人机对话</strong>。其广泛性表现在：<strong>用户可以请求系统提供多方面的服务</strong>，如文件编辑、数据处理和资源共享等。<h2 id="5、实时系统"><a href="#5、实时系统" class="headerlink" title="5、实时系统"></a>5、实时系统</h2>所谓“实时”，是表示“及时”，而实时系统(<code>Real Time System</code>)是指系统能及时(或即时)响应外部事件的请求，在规定的时间内完成对该事件的处理，并控制所有实时任务<strong>协调一致</strong>地运行。<h3 id="1-应用需求"><a href="#1-应用需求" class="headerlink" title="1.    应用需求"></a>1.    应用需求</h3>虽然多道批处理系统和分时系统已能获得较为令人满意的资源利用率和响应时间，从而使计算机的应用范围日益扩大，但它们仍然不能满足以下某些应用领域的需要。</li>
<li><strong>实时控制</strong>。当把计算机用于生产过程的控制，以形成以计算机为中心的控制系统时， 系统要求能<strong>实时采集现场数据</strong>，并对所采集的数据进行<strong>及时处理</strong>，进而自动地控制相应的执行机构，使某些(个)参数(如温度、压力、方位等)能按预定的规律变化，以保证产品的质量和提高产量。通常把用于进行实时控制的系统称为<strong>实时系统</strong>。</li>
<li><strong>实时信息处理</strong>。通常，人们把用于对<strong>信息进行实时处理</strong>的系统称为实时信息处理系统。该系统由一台或多台主机通过通信线路连接到成百上千个远程终端上，计算机接收从远程终端上发来的服务请求，根据用户提出的请求对信息进行检索和处理，并在很短的时间内为用户做出正确的响应。典型的实时信息处理系统有早期的飞机或火车的订票系统、情报检索系统等。<h3 id="2-实时任务"><a href="#2-实时任务" class="headerlink" title="2.    实时任务"></a>2.    实时任务</h3>在实时系统中必然存在着若干个实时任务，这些任务通常与某个(些)外部设备相关，能反应或控制相应的外部设备，因而带有某种程度的紧迫性。可从不同的角度对实时任务加以分类。</li>
<li>按任务执行时是否呈现<strong>周期性</strong>来划分</li>
</ul>
<ol>
<li><strong>周期性实时任务</strong>。外部设备周期性地发出激励信号给计算机，要求它按指定周期循环执行，以便周期性地控制某外部设备。</li>
<li><strong>非周期性实时任务</strong>。外部设备所发出的激励信号并无明显的周期性，但都必须联系着一个<strong>截止时间</strong>(<code>Deadline</code>)。它又可分为<strong>开始截止时间</strong>(某任务在某时间以前必须开始执行) 和<strong>完成截止时间</strong>(某任务在某时间以前必须完成)两部分。</li>
</ol>
<ul>
<li>根据对截止时间的要求来划分</li>
</ul>
<ol>
<li><strong>硬实时任务</strong>(<code>Hard real-time Task</code>)。系统必须满足任务对截止时间的要求，否则可能<br>出现难以预测的结果。</li>
<li><strong>软实时任务</strong>(<code>Soft real-time Task</code>)。它也联系着一个截止时间，但并不严格，若偶尔错过了任务的截止时间，对系统产生的影响也不会太大。<h3 id="3-实时系统与分时系统特征的比较"><a href="#3-实时系统与分时系统特征的比较" class="headerlink" title="3.    实时系统与分时系统特征的比较"></a>3.    实时系统与分时系统特征的比较</h3>实时系统有着与分时系统相似但并不完全相同的特点，下面从五个方面对这两种系统加以比较。</li>
</ol>
<ul>
<li><strong>多路性</strong>。<strong>实时信息处理系统也按分时原则为多个终端用户服务</strong>。实时控制系统的多路性则主要表现在<strong>系统周期性地对多路现场信息进行采集，以及对多个对象或多个执行机构进行控制</strong>。而分时系统中的多路性则与用户情况有关，时多时少。</li>
<li><strong>独立性</strong>。实时信息处理系统中的每个终端用户在向实时系统提出服务请求时，是彼此独立地操作，互不干扰；而实时控制系统中，对信息的采集和对对象的控制也都是彼此互不干扰。</li>
<li><strong>及时性</strong>。实时信息处理系统对实时性的要求与分时系统类似，都是以人所能接受的等待时间来确定的；而实时控制系统的及时性，则是以控制对象所要求的开始截止时间或完成截止时间来确定的，一般为秒级到毫秒级，甚至有的要低于 100 微秒。</li>
<li><strong>交互性</strong>。实时信息处理系统虽然也具有交互性，但这里人与系统的交互仅限于访问系统中某些特定的专用服务程序。它不像分时系统那样能向终端用户提供数据处理和资源共享等服务。</li>
<li><strong>可靠性</strong>。分时系统虽然也要求系统可靠，但相比之下，实时系统则要求系统具有高度的可靠性。因为任何差错都可能带来巨大的经济损失，甚至是无法预料的灾难性后果， 所以在实时系统中，往往都采取了多级容错措施来保障系统的安全性及数据的安全性。<h2 id="6、微机操作系统的发展"><a href="#6、微机操作系统的发展" class="headerlink" title="6、微机操作系统的发展"></a>6、微机操作系统的发展</h2>随着 <code>VLSI</code> 和计算机体系结构的发展，以及应用需求的不断扩大，操作系统仍在继续发展。由此先后形成了<strong>微机操作系统</strong>、<strong>网络操作系统</strong>等。<br>配置在微型机上的操作系统称为微机操作系统。最早诞生的微机操作系统是配置在8 位微机上的 <code>CP/M</code>。后来出现了 16 位微机，相应地，16 位微机操作系统也就应运而生。当微机发展为 32 位、64 位时，32 位和 64 位微机操作系统也应运而生。可见，微机操作系统<strong>可按微机的字长来分，但也可将它按运行方式分</strong>为如下几类：<h3 id="1-单用户单任务操作系统"><a href="#1-单用户单任务操作系统" class="headerlink" title="1.    单用户单任务操作系统"></a>1.    单用户单任务操作系统</h3>单用户单任务操作系统的含义是，<strong>只允许一个用户上机，且只允许用户程序作为一个任务运行</strong>。这是最简单的微机操作系统，主要配置在 8 位和 16 位微机上。最有代表性的单用户单任务微机操作系统是 <code>CP/M</code> 和 <code>MS-DOS</code>。</li>
<li>CP/M<br>1974 年第一代通用 8 位微处理机芯片 <code>Intel 8080</code> 出现后的第二年，<code>Digital Research</code> 公司就开发出带有软盘系统的 8 位微机操作系统。1977 年 <code>Digital Research</code> 公司对 <code>CP/M</code> 进行了重写，使其可配置在以 <code>Intel 8080</code>、<code>8085</code>、<code>Z80</code> 等 8 位芯片为基础的多种微机上。1979 年又推出带有硬盘管理功能的 <code>CP/M 2.2</code> 版本。由于 <code>CP/M</code> 具有较好的体系结构，<strong>可适应性强</strong>， 且具有<strong>可移植性</strong>以及易学易用等优点，使之在 8 位微机中占据了统治地位。</li>
<li>MS-DOS<br>1981 年 <code>IBM</code> 公司首次推出了 <code>IBM-PC</code> 个人计算机(16 位微机)，在微机中采用了微软公司开发的 <code>MS-DOS</code>(<code>Disk Operating System</code>)操作系统，该操作系统在 <code>CP/M</code> 的基础上进行了较大的扩充，使其在功能上有很大的增强。1983 年 <code>IBM</code> 推出 <code>PC/AT</code>(配有 <code>Intel 80286</code> 芯片)， 相应地，微软又开发出 <code>MS-DOS 2.0</code> 版本，它不仅能支持硬盘设备，还采用了树形目录结构的文件系统。1987 年又宣布了 <code>MS-DOS 3.3</code> 版本。从 <code>MS-DOS 1.0</code> 到 3.3 为止的 DOS 版本都属于<strong>单用户单任务操作系统</strong>，内存被限制在 <code>640 KB</code>。从 1989 年到 1993 年又先后推出了多个 MS-DOS 版本，它们都可以配置在 <code>Intel 80386</code>、<code>80486</code> 等 32 位微机上。从 20 世纪80 年代到 90 年代初，由于 MS-DOS 性能优越而受到当时用户的广泛欢迎，成为事实上的16 位单用户单任务操作系统标准。<h3 id="2-单用户多任务操作系统"><a href="#2-单用户多任务操作系统" class="headerlink" title="2.    单用户多任务操作系统"></a>2.    单用户多任务操作系统</h3>单用户多任务操作系统的含义是，<strong>只允许一个用户上机，但允许用户把程序分为若干个任务，使它们并发执行，从而有效地改善了系统的性能</strong>。<blockquote>
<p>目前在 32 位微机上配置的操作系统基本上都是单用户多任务操作系统，其中最有代表性的是由微软公司推出的 Windows。1985 年和 1987 年微软公司先后推出了 Windows 1.0 和 Windows 2.0 版本操作系统，由于当时的硬件平台还只是 16 位微机，对 1.0 和 2.0 版本不能很好的支持。1990 年微软公司又发布了 Windows 3.0 版本，随后又宣布了 Windows 3.1 版本，它们主要是针对 386 和 486 等 32 位微机开发的，较之以前的操作系统有着重大的改进，引入了友善的图形用户界面，支持多任务和扩展内存的功能，使计算机更好使用，从而成为 386 和 486 等微机的主流操作系统。<br>1995 年微软公司推出了 Windows 95，它较之以前的 Windows 3.1 有许多重大改进，采用了全 32 位的处理技术，并兼容以前的 16 位应用程序，在该系统中还集成了支持 <code>Internet</code>的网络功能。1998 年微软公司又推出了 Windows 95 的改进版 Windows 98，它已是最后一个仍然兼容以前的 16 位应用程序的 Windows，其最主要的改进是把微软公司自己开发的 <code>Internet</code> 浏览器整合到系统中，大大方便了用户上网浏览，另一个特点是增加了对多媒体的支持。2001 年微软又发布了 32 位版本的 Windows XP，同时提供了家用和商业工作站两种版本，它是当前使用最广泛的个人操作系统。2001 年还发布了 64 位版本的 Windows XP。在开发上述 Windows 操作系统的同时，微软公司又开始开发网络操作系统 WindowsNT，它是针对网络开发的操作系统，在系统中融入了许多面向网络的功能，这里就不对它进行详细介绍了。</p>
</blockquote>
<h3 id="3-多用户多任务操作系统"><a href="#3-多用户多任务操作系统" class="headerlink" title="3.    多用户多任务操作系统"></a>3.    多用户多任务操作系统</h3>多用户多任务操作系统的含义是，<strong>允许多个用户通过各自的终端使用同一台机器，共享主机系统中的各种资源，而每个用户程序又可进一步分为几个任务，使它们能并发执行， 从而可进一步提高资源利用率和系统吞吐量</strong>。在大、中和小型机中所配置的大多是<strong>多用户多任务操作系统</strong>，而在 32 位微机上也有不少是配置的多用户多任务操作系统，其中最有代表性的是 <code>UNIX OS</code>。<br>UNIX OS 是美国电报电话公司的 Bell 实验室在 1969～1970 年期间开发的，1979 年推出来的 UNIX V.7 已被广泛应用于多种中、小型机上。随着微机性能的提高，人们又将 UNIX 移植到微机上。在 1980 年前后，将 UNIX 第 7 版本移植到 Motorola 公司的 MC 680xx 微机上，后来又将 UNIX V7.0 版本进行简化后移植到 Intel 8080 上，把它称为 Xenix。现在最有影响的两个能运行在微机上的 UNIX 操作系统的变型是 <code>Solaris OS</code> 和 <code>Linux OS</code>。</li>
<li>Solaris OS：SUN 公司于 1982 年推出的 SUN OS 1.0 是一个运行在 Motorola 680x0 平台上的 UNIX OS。在 1988 年宣布的 SUN OS 4.0 把运行平台从早期的 Motorola 680x0 平台迁移到SPARC 平台，并开始支持 Intel 公司的 Intel 80x86；1992 年SUN 发布了Solaris 2.0。从 1998 年开始，Sun 公司推出 64 位操作系统 Solaris 2.7 和 2.8，这几款操作系统在<strong>网络特性</strong>、<strong>互操作性</strong>、<strong>兼容性</strong>以及<strong>易于配置</strong>和<strong>管理</strong>方面均有很大的提高。</li>
<li>Linux OS：Linux 是 UNIX 的一个重要变种，最初是由芬兰学生 Linus Torvalds 针对 Intel 80386 开发的。1991 年在 Internet 网上发布第一个 Linux 版本，由于源代码公开，因此有很多人通过 <code>Internet</code> 与之合作，使 Linux 的性能迅速提高，其应用范围也日益扩大。相应地，源代码也急剧膨胀，此时它已是具有全面功能的 UNIX 系统，大量在 UNIX 上运行的软件(包括 1000 多种实用工具软件和大量的网络软件)被移植到 Linux 上，而且可以在主要的微机上运行，如 Intel 80x86 Pentium 等。</li>
</ul>

            </div>
            <hr/>

            

    <div class="reprint" id="reprint-statement">
        
            <div class="reprint__author">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-user">
                        文章作者:
                    </i>
                </span>
                <span class="reprint-info">
                    <a href="/about" rel="external nofollow noreferrer">牧码人</a>
                </span>
            </div>
            <div class="reprint__type">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-link">
                        文章链接:
                    </i>
                </span>
                <span class="reprint-info">
                    <a href="http://village-_head.gitee.io/posts/undefined.html">http://village-_head.gitee.io/posts/undefined.html</a>
                </span>
            </div>
            <div class="reprint__notice">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-copyright">
                        版权声明:
                    </i>
                </span>
                <span class="reprint-info">
                    本博客所有文章除特別声明外，均采用
                    <a href="https://creativecommons.org/licenses/by/4.0/deed.zh" rel="external nofollow noreferrer" target="_blank">CC BY 4.0</a>
                    许可协议。转载请注明来源
                    <a href="/about" target="_blank">牧码人</a>
                    !
                </span>
            </div>
        
    </div>

    <script async defer>
      document.addEventListener("copy", function (e) {
        let toastHTML = '<span>复制成功，请遵循本文的转载规则</span><button class="btn-flat toast-action" onclick="navToReprintStatement()" style="font-size: smaller">查看</a>';
        M.toast({html: toastHTML})
      });

      function navToReprintStatement() {
        $("html, body").animate({scrollTop: $("#reprint-statement").offset().top - 80}, 800);
      }
    </script>



            <div class="tag_share" style="display: block;">
                <div class="post-meta__tag-list" style="display: inline-block;">
                    
                        <div class="article-tag">
                            
                                <a href="/tags/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">
                                    <span class="chip bg-color">操作系统</span>
                                </a>
                            
                        </div>
                    
                </div>
                <div class="post_share" style="zoom: 80%; width: fit-content; display: inline-block; float: right; margin: -0.15rem 0;">
                    <link rel="stylesheet" type="text/css" href="/libs/share/css/share.min.css">
<div id="article-share">

    
    <div class="social-share" data-sites="twitter,facebook,google,qq,qzone,wechat,weibo,douban,linkedin" data-wechat-qrcode-helper="<p>微信扫一扫即可分享！</p>"></div>
    <script src="/libs/share/js/social-share.min.js"></script>
    

    

</div>

                </div>
            </div>
            
                <style>
    #reward {
        margin: 40px 0;
        text-align: center;
    }

    #reward .reward-link {
        font-size: 1.4rem;
        line-height: 38px;
    }

    #reward .btn-floating:hover {
        box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2), 0 5px 15px rgba(0, 0, 0, 0.2);
    }

    #rewardModal {
        width: 320px;
        height: 350px;
    }

    #rewardModal .reward-title {
        margin: 15px auto;
        padding-bottom: 5px;
    }

    #rewardModal .modal-content {
        padding: 10px;
    }

    #rewardModal .close {
        position: absolute;
        right: 15px;
        top: 15px;
        color: rgba(0, 0, 0, 0.5);
        font-size: 1.3rem;
        line-height: 20px;
        cursor: pointer;
    }

    #rewardModal .close:hover {
        color: #ef5350;
        transform: scale(1.3);
        -moz-transform:scale(1.3);
        -webkit-transform:scale(1.3);
        -o-transform:scale(1.3);
    }

    #rewardModal .reward-tabs {
        margin: 0 auto;
        width: 210px;
    }

    .reward-tabs .tabs {
        height: 38px;
        margin: 10px auto;
        padding-left: 0;
    }

    .reward-content ul {
        padding-left: 0 !important;
    }

    .reward-tabs .tabs .tab {
        height: 38px;
        line-height: 38px;
    }

    .reward-tabs .tab a {
        color: #fff;
        background-color: #ccc;
    }

    .reward-tabs .tab a:hover {
        background-color: #ccc;
        color: #fff;
    }

    .reward-tabs .wechat-tab .active {
        color: #fff !important;
        background-color: #22AB38 !important;
    }

    .reward-tabs .alipay-tab .active {
        color: #fff !important;
        background-color: #019FE8 !important;
    }

    .reward-tabs .reward-img {
        width: 210px;
        height: 210px;
    }
</style>

<div id="reward">
    <a href="#rewardModal" class="reward-link modal-trigger btn-floating btn-medium waves-effect waves-light red">赏</a>

    <!-- Modal Structure -->
    <div id="rewardModal" class="modal">
        <div class="modal-content">
            <a class="close modal-close"><i class="fas fa-times"></i></a>
            <h4 class="reward-title">你的赏识是我前进的动力</h4>
            <div class="reward-content">
                <div class="reward-tabs">
                    <ul class="tabs row">
                        <li class="tab col s6 alipay-tab waves-effect waves-light"><a href="#alipay">支付宝</a></li>
                        <li class="tab col s6 wechat-tab waves-effect waves-light"><a href="#wechat">微 信</a></li>
                    </ul>
                    <div id="alipay">
                        <img src="/medias/reward/alipay.jpg" class="reward-img" alt="支付宝打赏二维码">
                    </div>
                    <div id="wechat">
                        <img src="/medias/reward/wechat.png" class="reward-img" alt="微信打赏二维码">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
    $(function () {
        $('.tabs').tabs();
    });
</script>

            
        </div>
    </div>

    

    

    

    

    
        <style>
    .valine-card {
        margin: 1.5rem auto;
    }

    .valine-card .card-content {
        padding: 20px 20px 5px 20px;
    }

    #vcomments textarea {
        box-sizing: border-box;
        background: url("/medias/comment_bg.png") 100% 100% no-repeat;
    }

    #vcomments p {
        margin: 2px 2px 10px;
        font-size: 1.05rem;
        line-height: 1.78rem;
    }

    #vcomments blockquote p {
        text-indent: 0.2rem;
    }

    #vcomments a {
        padding: 0 2px;
        color: #4cbf30;
        font-weight: 500;
        text-decoration: none;
    }

    #vcomments img {
        max-width: 100%;
        height: auto;
        cursor: pointer;
    }

    #vcomments ol li {
        list-style-type: decimal;
    }

    #vcomments ol,
    ul {
        display: block;
        padding-left: 2em;
        word-spacing: 0.05rem;
    }

    #vcomments ul li,
    ol li {
        display: list-item;
        line-height: 1.8rem;
        font-size: 1rem;
    }

    #vcomments ul li {
        list-style-type: disc;
    }

    #vcomments ul ul li {
        list-style-type: circle;
    }

    #vcomments table,
    th,
    td {
        padding: 12px 13px;
        border: 1px solid #dfe2e5;
    }

    #vcomments table,
    th,
    td {
        border: 0;
    }

    table tr:nth-child(2n),
    thead {
        background-color: #fafafa;
    }

    #vcomments table th {
        background-color: #f2f2f2;
        min-width: 80px;
    }

    #vcomments table td {
        min-width: 80px;
    }

    #vcomments h1 {
        font-size: 1.85rem;
        font-weight: bold;
        line-height: 2.2rem;
    }

    #vcomments h2 {
        font-size: 1.65rem;
        font-weight: bold;
        line-height: 1.9rem;
    }

    #vcomments h3 {
        font-size: 1.45rem;
        font-weight: bold;
        line-height: 1.7rem;
    }

    #vcomments h4 {
        font-size: 1.25rem;
        font-weight: bold;
        line-height: 1.5rem;
    }

    #vcomments h5 {
        font-size: 1.1rem;
        font-weight: bold;
        line-height: 1.4rem;
    }

    #vcomments h6 {
        font-size: 1rem;
        line-height: 1.3rem;
    }

    #vcomments p {
        font-size: 1rem;
        line-height: 1.5rem;
    }

    #vcomments hr {
        margin: 12px 0;
        border: 0;
        border-top: 1px solid #ccc;
    }

    #vcomments blockquote {
        margin: 15px 0;
        border-left: 5px solid #42b983;
        padding: 1rem 0.8rem 0.3rem 0.8rem;
        color: #666;
        background-color: rgba(66, 185, 131, .1);
    }

    #vcomments pre {
        font-family: monospace, monospace;
        padding: 1.2em;
        margin: .5em 0;
        background: #272822;
        overflow: auto;
        border-radius: 0.3em;
        tab-size: 4;
    }

    #vcomments code {
        font-family: monospace, monospace;
        padding: 1px 3px;
        font-size: 0.92rem;
        color: #e96900;
        background-color: #f8f8f8;
        border-radius: 2px;
    }

    #vcomments pre code {
        font-family: monospace, monospace;
        padding: 0;
        color: #e8eaf6;
        background-color: #272822;
    }

    #vcomments pre[class*="language-"] {
        padding: 1.2em;
        margin: .5em 0;
    }

    #vcomments code[class*="language-"],
    pre[class*="language-"] {
        color: #e8eaf6;
    }

    #vcomments [type="checkbox"]:not(:checked),
    [type="checkbox"]:checked {
        position: inherit;
        margin-left: -1.3rem;
        margin-right: 0.4rem;
        margin-top: -1px;
        vertical-align: middle;
        left: unset;
        visibility: visible;
    }

    #vcomments b,
    strong {
        font-weight: bold;
    }

    #vcomments dfn {
        font-style: italic;
    }

    #vcomments small {
        font-size: 85%;
    }

    #vcomments cite {
        font-style: normal;
    }

    #vcomments mark {
        background-color: #fcf8e3;
        padding: .2em;
    }

    #vcomments table,
    th,
    td {
        padding: 12px 13px;
        border: 1px solid #dfe2e5;
    }

    table tr:nth-child(2n),
    thead {
        background-color: #fafafa;
    }

    #vcomments table th {
        background-color: #f2f2f2;
        min-width: 80px;
    }

    #vcomments table td {
        min-width: 80px;
    }

    #vcomments [type="checkbox"]:not(:checked),
    [type="checkbox"]:checked {
        position: inherit;
        margin-left: -1.3rem;
        margin-right: 0.4rem;
        margin-top: -1px;
        vertical-align: middle;
        left: unset;
        visibility: visible;
    }
</style>

<div class="card valine-card" data-aos="fade-up">
    <div class="comment_headling"
        style="font-size: 20px; font-weight: 700; position: relative; padding-left: 20px; top: 15px; padding-bottom: 5px;">
        <i class="fas fa-comments fa-fw" aria-hidden="true"></i>
        <span>评论</span>
    </div>
    <div id="vcomments" class="card-content" style="display: grid">
    </div>
</div>

<script src="/libs/valine/av-min.js"></script>
<script src="/libs/valine/Valine.min.js"></script>
<script>
    new Valine({
        el: '#vcomments',
        appId: 'OI3aEQ67o8uMUYGgjrQbVN9m-gzGzoHsz',
        appKey: 'QPfgQsgn4wSje4DsUH1nzP9o',
        notify: 'false' === 'true',
        verify: 'false' === 'true',
        visitor: 'true' === 'true',
        avatar: 'mm',
        pageSize: '10',
        lang: 'zh-cn',
        placeholder: 'just go go'
    });
</script>
    

    

    

<article id="prenext-posts" class="prev-next articles">
    <div class="row article-row">
        
        <div class="article col s12 m6" data-aos="fade-up" data-aos="fade-up">
            <div class="article-badge left-badge text-color">
                <i class="far fa-dot-circle"></i>&nbsp;本篇
            </div>
            <div class="card">
                <a href="/posts/undefined.html">
                    <div class="card-image">
                        
                        
                        <img src="/medias/featureimages/12.jpg" class="responsive-img" alt="操作系统学习笔记 01 - 操作系统的目标、作用及发展过程">
                        
                        <span class="card-title">操作系统学习笔记 01 - 操作系统的目标、作用及发展过程</span>
                    </div>
                </a>
                <div class="card-content article-content">
                    <div class="summary block-with-text">
                        
                            一、操作系统的目标和作用在计算机系统上配置操作系统的主要目标，首先与计算机系统的规模有关。其次，影响操作系统的主要目标的另一个重要因素是操作系统的应用环境。
1、操作系统的目标目前存在着多种类型的 OS，不同类型的 OS，其目标各有所侧重。
                        
                    </div>
                    <div class="publish-info">
                            <span class="publish-date">
                                <i class="far fa-clock fa-fw icon-date"></i>2020-05-16
                            </span>
                        <span class="publish-author">
                            
                            <i class="fas fa-bookmark fa-fw icon-category"></i>
                            
                            <a href="/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" class="post-category">
                                    操作系统学习笔记
                                </a>
                            
                            
                        </span>
                    </div>
                </div>

                
                <div class="card-action article-tags">
                    
                    <a href="/tags/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">
                        <span class="chip bg-color">操作系统</span>
                    </a>
                    
                </div>
                
            </div>
        </div>
        
        
        <div class="article col s12 m6" data-aos="fade-up">
            <div class="article-badge right-badge text-color">
                下一篇&nbsp;<i class="fas fa-chevron-right"></i>
            </div>
            <div class="card">
                <a href="/posts/9af8.html">
                    <div class="card-image">
                        
                        
                        <img src="/medias/featureimages/18.jpg" class="responsive-img" alt="MySQL学习笔记01- MySQL及Navicat Premium的简介及安装">
                        
                        <span class="card-title">MySQL学习笔记01- MySQL及Navicat Premium的简介及安装</span>
                    </div>
                </a>
                <div class="card-content article-content">
                    <div class="summary block-with-text">
                        
                            一、MySQL1、MySQL简介
MySQL是一个功能齐全的关系数据库管理系统（RDBMS），可以与Oracle DB和Microsoft的SQLServer竞争。MySQL由瑞典公司MySQL AB赞助，该公司由Oracle公司拥有。


                        
                    </div>
                    <div class="publish-info">
                            <span class="publish-date">
                                <i class="far fa-clock fa-fw icon-date"></i>2020-05-16
                            </span>
                        <span class="publish-author">
                            
                            <i class="fas fa-bookmark fa-fw icon-category"></i>
                            
                            <a href="/categories/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" class="post-category">
                                    MySQL学习笔记
                                </a>
                            
                            
                        </span>
                    </div>
                </div>
                
                <div class="card-action article-tags">
                    
                    <a href="/tags/MySQL/">
                        <span class="chip bg-color">MySQL</span>
                    </a>
                    
                    <a href="/tags/Navicat-Premium/">
                        <span class="chip bg-color">Navicat Premium</span>
                    </a>
                    
                </div>
                
            </div>
        </div>
        
    </div>
</article>

</div>


<script>
    $('#articleContent').on('copy', function (e) {
        // IE8 or earlier browser is 'undefined'
        if (typeof window.getSelection === 'undefined') return;

        var selection = window.getSelection();
        // if the selection is short let's not annoy our users.
        if (('' + selection).length < Number.parseInt('120')) {
            return;
        }

        // create a div outside of the visible area and fill it with the selected text.
        var bodyElement = document.getElementsByTagName('body')[0];
        var newdiv = document.createElement('div');
        newdiv.style.position = 'absolute';
        newdiv.style.left = '-99999px';
        bodyElement.appendChild(newdiv);
        newdiv.appendChild(selection.getRangeAt(0).cloneContents());

        // we need a <pre> tag workaround.
        // otherwise the text inside "pre" loses all the line breaks!
        if (selection.getRangeAt(0).commonAncestorContainer.nodeName === 'PRE') {
            newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
        }

        var url = document.location.href;
        newdiv.innerHTML += '<br />'
            + '来源: MuMa<br />'
            + '文章作者: 牧码人<br />'
            + '文章链接: <a href="' + url + '">' + url + '</a><br />'
            + '本文章著作权归作者所有，任何形式的转载都请注明出处。';

        selection.selectAllChildren(newdiv);
        window.setTimeout(function () {bodyElement.removeChild(newdiv);}, 200);
    });
</script>


<!-- 代码块功能依赖 -->
<script type="text/javascript" src="/libs/codeBlock/codeBlockFuction.js"></script>

<!-- 代码语言 -->

<script type="text/javascript" src="/libs/codeBlock/codeLang.js"></script>


<!-- 代码块复制 -->

<script type="text/javascript" src="/libs/codeBlock/codeCopy.js"></script>


<!-- 代码块收缩 -->

<script type="text/javascript" src="/libs/codeBlock/codeShrink.js"></script>


<!-- 代码块折行 -->

<style type="text/css">
code[class*="language-"], pre[class*="language-"] { white-space: pre !important; }
</style>


    </div>
    <div id="toc-aside" class="expanded col l3 hide-on-med-and-down">
        <div class="toc-widget">
            <div class="toc-title"><i class="far fa-list-alt"></i>&nbsp;&nbsp;目录</div>
            <div id="toc-content"></div>
        </div>
    </div>
</div>

<!-- TOC 悬浮按钮. -->

<div id="floating-toc-btn" class="hide-on-med-and-down">
    <a class="btn-floating btn-large bg-color">
        <i class="fas fa-list-ul"></i>
    </a>
</div>


<script src="/libs/tocbot/tocbot.min.js"></script>
<script>
    $(function () {
        tocbot.init({
            tocSelector: '#toc-content',
            contentSelector: '#articleContent',
            headingsOffset: -($(window).height() * 0.4 - 45),
            collapseDepth: Number('0'),
            headingSelector: 'h2, h3, h4'
        });

        // modify the toc link href to support Chinese.
        let i = 0;
        let tocHeading = 'toc-heading-';
        $('#toc-content a').each(function () {
            $(this).attr('href', '#' + tocHeading + (++i));
        });

        // modify the heading title id to support Chinese.
        i = 0;
        $('#articleContent').children('h2, h3, h4').each(function () {
            $(this).attr('id', tocHeading + (++i));
        });

        // Set scroll toc fixed.
        let tocHeight = parseInt($(window).height() * 0.4 - 64);
        let $tocWidget = $('.toc-widget');
        $(window).scroll(function () {
            let scroll = $(window).scrollTop();
            /* add post toc fixed. */
            if (scroll > tocHeight) {
                $tocWidget.addClass('toc-fixed');
            } else {
                $tocWidget.removeClass('toc-fixed');
            }
        });

        
        /* 修复文章卡片 div 的宽度. */
        let fixPostCardWidth = function (srcId, targetId) {
            let srcDiv = $('#' + srcId);
            if (srcDiv.length === 0) {
                return;
            }

            let w = srcDiv.width();
            if (w >= 450) {
                w = w + 21;
            } else if (w >= 350 && w < 450) {
                w = w + 18;
            } else if (w >= 300 && w < 350) {
                w = w + 16;
            } else {
                w = w + 14;
            }
            $('#' + targetId).width(w);
        };

        // 切换TOC目录展开收缩的相关操作.
        const expandedClass = 'expanded';
        let $tocAside = $('#toc-aside');
        let $mainContent = $('#main-content');
        $('#floating-toc-btn .btn-floating').click(function () {
            if ($tocAside.hasClass(expandedClass)) {
                $tocAside.removeClass(expandedClass).hide();
                $mainContent.removeClass('l9');
            } else {
                $tocAside.addClass(expandedClass).show();
                $mainContent.addClass('l9');
            }
            fixPostCardWidth('artDetail', 'prenext-posts');
        });
        
    });
</script>

    

</main>




    <footer class="page-footer bg-color">
    
    <div class="container row center-align" style="margin-bottom: 0px !important;">
        <div class="col s12 m8 l8 copy-right">
           
            
            
            
            
            
            <span id="busuanzi_container_site_pv">
                |&nbsp;<i class="far fa-eye"></i>&nbsp;总访问量:&nbsp;<span id="busuanzi_value_site_pv"
                    class="white-color"></span>&nbsp;次
            </span>
            
            
            <span id="busuanzi_container_site_uv">
                |&nbsp;<i class="fas fa-users"></i>&nbsp;总访问人数:&nbsp;<span id="busuanzi_value_site_uv"
                    class="white-color"></span>&nbsp;人|
            </span>
            
            <br>
            
            <br>
            
        </div>
        <div class="col s12 m4 l4 social-link social-statis">
    <a href="https://github.com/DingYi-com" class="tooltipped" target="_blank" data-tooltip="访问我的GitHub" data-position="top" data-delay="50">
        <i class="fab fa-github"></i>
    </a>



    <a href="mailto:2891117964@qq.com" class="tooltipped" target="_blank" data-tooltip="邮件联系我" data-position="top" data-delay="50">
        <i class="fas fa-envelope-open"></i>
    </a>







    <a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=2891117964" class="tooltipped" target="_blank" data-tooltip="QQ联系我: 2891117964" data-position="top" data-delay="50">
        <i class="fab fa-qq"></i>
    </a>







</div>
    </div>
</footer>

<div class="progress-bar"></div>


    <!-- 搜索遮罩框 -->
<div id="searchModal" class="modal">
    <div class="modal-content">
        <div class="search-header">
            <span class="title"><i class="fas fa-search"></i>&nbsp;&nbsp;搜索</span>
            <input type="search" id="searchInput" name="s" placeholder="请输入搜索的关键字"
                   class="search-input">
        </div>
        <div id="searchResult"></div>
    </div>
</div>

<script src="/js/search.js"></script>
<script type="text/javascript">
$(function () {
    searchFunc("/search.xml", 'searchInput', 'searchResult');
});
</script>

    <!-- 回到顶部按钮 -->
<div id="backTop" class="top-scroll">
    <a class="btn-floating btn-large waves-effect waves-light" href="#!">
        <i class="fas fa-arrow-up"></i>
    </a>
</div>
  
    <script src="/libs/materialize/materialize.min.js"></script>
    <script src="/libs/masonry/masonry.pkgd.min.js"></script>
    <script src="/libs/aos/aos.js"></script>
    <script src="/libs/scrollprogress/scrollProgress.min.js"></script>
    <script src="/libs/lightGallery/js/lightgallery-all.min.js"></script>
    <script src="/js/matery.js"></script>
		<script src="/js/snow.js"></script>

    <!-- Baidu Analytics -->

<script>
    var _hmt = _hmt || [];
    (function () {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?bd2ebe0962f4d8e72ae50517d7eb5d30";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script>

    <!-- Baidu Push -->

<script>
    (function () {
        var bp = document.createElement('script');
        var curProtocol = window.location.protocol.split(':')[0];
        if (curProtocol === 'https') {
            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
        } else {
            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
        }
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(bp, s);
    })();
</script>

    
    <script src="/libs/others/clicklove.js" async="async"></script>
    
    
    <script async src="/libs/others/busuanzi.pure.mini.js"></script>
    

    

    
    <script>
        (function (i, s, o, g, r, a, m) {
            i["DaoVoiceObject"] = r;
            i[r] = i[r] || function () {
                (i[r].q = i[r].q || []).push(arguments)
            }, i[r].l = 1 * new Date();
            a = s.createElement(o), m = s.getElementsByTagName(o)[0];
            a.async = 1;
            a.src = g;
            a.charset = "utf-8";
            m.parentNode.insertBefore(a, m)
        })(window, document, "script", ('https:' == document.location.protocol ? 'https:' : 'http:') +
            "//widget.daovoice.io/widget/6984b559.js", "daovoice")
        daovoice('init', {
            app_id: "65a0d8a3"
        });
        daovoice('update');
    </script>
    

    
    <script type="text/javascript" color="0,0,255"
        pointColor="0,0,255" opacity='0.7'
        zIndex="-1" count="99"
        src="/libs/background/canvas-nest.js"></script>
    

    

    
    <script type="text/javascript" src="/libs/background/ribbon-dynamic.js" async="async"></script>
    

    
    <script src="/libs/instantpage/instantpage.js" type="module"></script>
    
		
        <script type="text/javascript" src="\js\FunnyTitle.js"></script>
        <script type="text/javascript" src="\js\click_show_text.js"></script>
</body>

</html>
